#include<iostream>
using namespace std;
#include<vector>
#define MOD 1000000007
class Solution {
public:
    int waysToStep(int n) {
        //1.处理边界情况（太小都用不上dp数组）
        if(n==1) return 1;
        if(n==2) return 2;
        if(n==3) return 4;

        //2.创建dp表
        vector<int> dp(n+1);
        //3.初始化
        dp[1]=1,dp[2]=2,dp[3]=4;
        for(int i=4;i<=n;i++)
        {
            dp[i]=((dp[i-1]+dp[i-2])%MOD+dp[i-3])%MOD;
        }
        //4.返回值
        return dp[n];
    }
};